<?php
//功能实现
if (!class_exists('WPCY_Admin_Function')) {
    class WPCY_Admin_Function
    {
        //选项值
        private static $option;

        public static function run()
        {
            //获取设置选项值
            $config = WPCY_Admin_Config::get_seting('option');
            //获取选项
            $option =   WPCY_Admin_Config::get_config($config, 'setting');
            self::$option =  $option;

            //加速应用市场
            $appMarket = WPCY_Admin_Config::get_config($option, 'appMarket');
            if ($appMarket !== "false") {
                add_filter('pre_http_request', array(__CLASS__, 'custom_http_request'), 999999, 3);
            }

            //后台加速
            $quicken = WPCY_Admin_Config::get_config($option, 'quicken');
            if ($quicken !== "false") {
                add_action('init',  array(__CLASS__, 'acc_admin'));
            }

            //初认头像
            $avatar = WPCY_Admin_Config::get_config($option, 'avatar');
            if ($avatar !== "false") {
                add_action('init',  array(__CLASS__, 'acc_cravatar'));
            }

            //加速字体
            $web_font = WPCY_Admin_Config::get_config($option, 'web_font');
            if ($web_font !== "false") {
                add_action('init',  array(__CLASS__, 'acc_googlefonts'));
            }
        }

        /**
         * 加速应用市场
         * $preempt 是一个布尔值，表示是否提前终止 HTTP 请求；
         * $r 是一个关联数组，包含了 HTTP 请求的各种参数；
         * $url 是当前请求的 URL。
         */
        public static function custom_http_request($preempt, $r, $url)
        {
            // 检查是否需要拦截请求
            if ((!stristr($url, 'api.wordpress.org') && !stristr($url, 'downloads.wordpress.org')) || get_option('wpapi') == 3) {
                return $preempt;
            }

            // 根据网站选项进行 URL 转换
            $url = self::custom_transform_url($url);



            // 发送 HTTP 请求
            return wp_remote_request($url, $r);
        }

        /**
         * 根据网站选项进行 URL 转换
         */
        private static function custom_transform_url($url)
        {
            //获取选项
            $appMarket = WPCY_Admin_Config::get_config(self::$option, 'appMarket');

            //官方镜像
            if ($appMarket === "official") {
                $url = str_replace('api.wordpress.org', 'api.wp-china-yes.net', $url);
                $url = str_replace('downloads.wordpress.org', 'downloads.wp-china-yes.net', $url);
            }

            //文派中国
            if ($appMarket === "wenpai") {
                $url = str_replace('api.wordpress.org', 'api.wenpai.org', $url);
                $url = str_replace('downloads.wordpress.org', 'downloads.wenpai.org', $url);
            }
            return $url;
        }


        /**
         * 后台加速
         */
        public static  function acc_admin()
        {
            $quicken = WPCY_Admin_Config::get_config(self::$option, 'quicken');
            if (
                !stristr($GLOBALS['wp_version'], 'alpha') &&
                !stristr($GLOBALS['wp_version'], 'beta') &&
                !stristr($GLOBALS['wp_version'], 'RC') &&
                !isset($GLOBALS['lp_version'])
            ) {
                // 公共加速
                if ($quicken === "public") {
                    self::page_str_replace('preg_replace', [
                        '~' . home_url('/') . '(wp-admin|wp-includes)/(css|js)/~',
                        sprintf('https://a2.wp-china-yes.net/WordPress@%s/$1/$2/', $GLOBALS['wp_version'])
                    ], 1);
                }
                // 萌芽加速TODO:没有加速地址
                if ($quicken === "mengya") {
                    self::page_str_replace('preg_replace', [
                        '~' . home_url('/') . '(wp-admin|wp-includes)/(css|js)/~',
                        sprintf('https://a2.wp-china-yes.net/WordPress@%s/$1/$2/', $GLOBALS['wp_version'])
                    ], 1);
                }
            }
        }

        /**
         * 加速头像
         */
        public static function acc_cravatar()
        {
            add_filter('um_user_avatar_url_filter',  array(__CLASS__, 'get_cravatar_url'), 1);
            add_filter('bp_gravatar_url',  array(__CLASS__, 'get_cravatar_url'), 1);
            add_filter('get_avatar_url',  array(__CLASS__, 'get_cravatar_url'), 1);
            add_filter('avatar_defaults',  array(__CLASS__, 'set_defaults_for_cravatar'), 1);
            add_filter('user_profile_picture_description',  array(__CLASS__, 'set_user_profile_picture_for_cravatar'));
        }
        /**
         * 替换Gravatar头像为Cravatar头像
         *
         * Cravatar是Gravatar在中国的完美替代方案，你可以在https://cravatar.cn更新你的头像
         */
        public static function get_cravatar_url($url)
        {
            $sources = array(
                'www.gravatar.com',
                '0.gravatar.com',
                '1.gravatar.com',
                '2.gravatar.com',
                'secure.gravatar.com',
                'cn.gravatar.com',
                'gravatar.com',
            );

            return str_replace($sources, 'cravatar.cn', $url);
        }

        /**
         * 替换WordPress讨论设置中的默认LOGO名称
         */
        public static function set_defaults_for_cravatar($avatar_defaults)
        {
            $avatar_defaults['gravatar_default'] = 'Cravatar 标志';

            return $avatar_defaults;
        }

        /**
         * 替换个人资料卡中的头像上传地址
         */
        public static function set_user_profile_picture_for_cravatar()
        {
            return '<a href="https://cravatar.com" target="_blank">您可以在 Cravatar 修改您的资料图片</a>';
        }

        /**
         * 加速字体
         */
        public static function acc_googlefonts()
        {
            $web_font = WPCY_Admin_Config::get_config(self::$option, 'web_font');
            $is_ajax = (defined('DOING_AJAX') && DOING_AJAX);
            //非AJAX环境下
            if (!$is_ajax) {
                //google加速
                if ($web_font === "google") {
                    self::page_str_replace('str_replace', [
                        'fonts.googleapis.com',
                        'googlefonts.wp-china-yes.net'
                    ], 1);

                    self::page_str_replace('str_replace', [
                        'ajax.googleapis.com',
                        'googleajax.wp-china-yes.net'
                    ], 1);
                }
                //中文字体
                if ($web_font === "china") {
                    self::page_str_replace('str_replace', [
                        'fonts.googleapis.com',
                        'googlefonts.wp-china-yes.net'
                    ], 1);

                    self::page_str_replace('str_replace', [
                        'ajax.googleapis.com',
                        'googleajax.wp-china-yes.net'
                    ], 1);
                }
            }
        }

        /**
         * @param $replace_func string 要调用的字符串关键字替换函数
         * @param $param array 传递给字符串替换函数的参数
         * @param $level int 替换级别：1.全局替换 3.前台替换 4.后台替换
         */
        private static function page_str_replace($replace_func, $param, $level)
        {
            if ($level == 3 && is_admin()) {
                return;
            } elseif ($level == 4 && !is_admin()) {
                return;
            }

            add_action('init', function () use ($replace_func, $param) {
                ob_start(function ($buffer) use ($replace_func, $param) {
                    $param[] = $buffer;

                    return call_user_func_array($replace_func, $param);
                });
            });
        }
    } //end
}
